package com.example.utils;

import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;

import java.util.Date;
import java.util.Map;

/**
 * @Description TODO
 * @Author fantasy
 * @Date 2024/6/27 21:34
 **/


public class JWTUtil {

    private static final String SECRET = "fantasy";

    /**
     * 生成JSON Web Token (JWT)
     *
     * 该方法用于创建一个包含特定声明的JWT，并设置过期时间为2小时。使用HMAC256算法对JWT进行签名。
     *
     * @param claim JWT中的声明，这是一个键值对的集合，其中键是字符串，值可以是任何Java对象。
     * @return 返回生成的JWT字符串。
     */
    public static String genJwt(Map<String, Object> claim) {
        // 创建JWT对象
        return JWT.create()
                // 添加自定义声明到JWT中
                .withClaim("claims", claim)
                // 设置JWT的过期时间，过期时间为当前时间后2小时
                .withExpiresAt(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 2))
                // 使用预定义的SECRET和HMAC256算法对JWT进行签名
                .sign(Algorithm.HMAC256(SECRET));
    }


    public static Map<String, Object> verifyJwt(String token) {
        return JWT.require(Algorithm.HMAC256(SECRET)).build()
                .verify(token)
                .getClaim("claims")
                .asMap();
    }
}
